/// @file c5_stubs.hpp
/// @brief Stub definitions for missing C5 types
/// Created for compilation testing
///
/// These are minimal stubs to satisfy compiler requirements.
/// They do not represent the actual C5 library implementation.

#pragma once
#include <cstdint>
#include <vector>

namespace c5 {

// EventType enum stub
enum class EventType : uint32_t {
    None = 0,
    Changed = 1,
    Cleared = 2,
    Added = 4,
    Removed = 8,
    All = 0xFFFFFFFF
};

// Feature enum stub (for HashSet)
enum class Feature : uint32_t {
    None = 0,
    Sequenced = 1,
    Sorted = 2,
    Unique = 4
};

// Forward declarations
template<typename T> class ArrayList;
template<typename T> class WeakViewList;

// Base class stubs - these would normally be complex generic base classes
template<typename T>
class ArrayBase {
public:
    virtual ~ArrayBase() = default;
};

template<typename T>
class CollectionBase {
public:
    virtual ~CollectionBase() = default;
};

template<typename T>
class IStack {
public:
    virtual ~IStack() = default;
};

template<typename T>
class IQueue {
public:
    virtual ~IQueue() = default;
};

// Bucket stub for HashSet
template<typename T>
struct Bucket {
    T value;
    int32_t hash;
    bool occupied = false;
};

// Random stub
class Random {
public:
    uint32_t next() { return 0; }
};

// WeakViewList stub
template<typename T>
class WeakViewList {
public:
    struct Node {
        T* data = nullptr;
    };
};

}  // namespace c5
